/**
 * node内置模块之EventEmitter
 * 
 * 观察者模式
 * 调用 vs 抛事件
 * 不知道通知者的存在，没有通知者接收是否还能继续？
 * 例如发布一篇文章，可以发布并且无需在意谁来看。但是发布文章的这个动作会抛出去，订阅的人可接收到。
 */

// 把抛事件的模块封装起来
// 强调抛事件这种模式更适合底层模块往外传递信息
const article = require("./author")
// article.setMaxListeners(200);

article.on("newArticle", ({ price, unit }) => {
    console.log(`新发布了一篇文章，价值：${price}${unit}`)

    if (price > 50) console.log("太贵啦，买不起！")
    else { console.log("加入购物车") }
})

setTimeout(() => {
    // 注意：EventEmitter如果添加了过多的监听器，Node.js觉得你有内存泄漏嫌疑，会抛出一个warning -》 MaxListenersExceededWarning: Possible EventEmitter memory leak detected。
    // article.setMaxListeners(200);消除限制
    for (let i = 0; i < 100; i++) {
        article.on('newArticle', ({ price }) => {
        })
    }
}, 3000)